package com.tanhua.dubbo.server.controller;

import com.tanhua.common.pojo.Settings;
import com.tanhua.common.pojo.BlackList;
import com.tanhua.common.utils.NoAuthorization;
import com.tanhua.dubbo.server.pojo.Publish;
import com.tanhua.dubbo.server.service.MyCenterService;
import com.tanhua.dubbo.server.vo.CountsVo;
import com.tanhua.dubbo.server.vo.PageResult;
import com.tanhua.dubbo.server.vo.SettingsVo;
import com.tanhua.dubbo.server.vo.UserInfoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName: MyCenterController
 * @Author:王晨晗
 * @Description: 我的
 * @Date: 2022/01/05/19:32
 */
@RestController
@RequestMapping("users")
public class MyCenterController {
    @Autowired
    private MyCenterService myCenterService;

    /**
     * @description 根据用户id获取用户信息
     * @param userId  当前用户id
     * @return
     */
    @GetMapping
    public ResponseEntity queryUserInfoByUserId(@RequestParam(value = "userID", required = false) Long userId){
        //调用方法,查询用户的信息
        UserInfoVo userInfoVo = myCenterService.queryUserInfoByUserId(userId);
        //响应用户详细信息集合
        return ResponseEntity.ok(userInfoVo);
    }

    /**
     * @description 修改用户信息
     * @param userInfoVo    用户信息对象
     * @return
     */
    @PutMapping
    public ResponseEntity updateUserInfo(@RequestBody UserInfoVo userInfoVo){
        //调用修改用户信息方法
        myCenterService.updateUserInfo(userInfoVo);
        //响应结果
        return ResponseEntity.ok(null);
    }

    /**
     * @description 互相喜欢,粉丝,喜欢数
     * @return
     */
    @GetMapping("counts")
    public ResponseEntity queryCounts(){
        //查询相互喜欢,粉丝,喜欢数 ,封装到统计Vo对象中;
        CountsVo countsVo = myCenterService.queryCounts();
        //响应统计对象
        return ResponseEntity.ok(countsVo);
    }

    /**
     * @description 查询喜欢,谁看过我/粉丝/相互喜欢列表
     * @param type      类型
     * @param page      当前页
     * @param pageSize  每页条数
     * @param nickName  昵称
     * @return
     */
    @GetMapping("/friends/{type}")
    public ResponseEntity queryFriendList(@PathVariable("type") Integer type ,
                                          @RequestParam(value = "page", defaultValue = "1") Integer page,
                                          @RequestParam(value = "pagesize", defaultValue = "10") Integer pageSize,
                                          @RequestParam(value = "nickname" , required = false) String nickName){
        //查询得到用户列表,封装到pageresult中
        PageResult pageResult = myCenterService.queryFriendList(type , page , pageSize , nickName);
        //响应结果
        return ResponseEntity.ok(pageResult);
    }

    /**
     * @description 取消喜欢
     * @param userId    取消喜欢的用户id
     * @return
     */
    @DeleteMapping("like/{uid}")
    public ResponseEntity disLike(@PathVariable("uid") Long userId){
        //执行取消喜欢操作
        myCenterService.disLike(userId);
        //返回响应
        return ResponseEntity.ok(null);
    }

    /**
     * @description 喜欢粉丝操作
     * @param userId 喜欢的用户id
     * @return
     */
    @PostMapping("fans/{uid}")
    public ResponseEntity likeFan(@PathVariable("uid") Long userId){
        //执行喜欢粉丝方法;
        myCenterService.likeFan(userId);
        //响应结果
        return ResponseEntity.ok(null);
    }


    /**
     * @description 查询用户配置
     * @return
     */
    @GetMapping("settings")
    public ResponseEntity querySettings(){
        //查询用户设置,得到用户设置Vo对象;
        SettingsVo settingsVo = myCenterService.querySettings();
        //响应设置vo对象
        return ResponseEntity.ok(settingsVo);
    }


    /**
     * @description 保存陌生人问题
     * @param param 请求参数
     * @return
     */
    @PostMapping("questions")
    public ResponseEntity saveQuestions(@RequestBody Map<String , String> param){
        //获取map中的陌生人问题
        String content = param.get("content");
        //执行保存陌生人问题方法
        myCenterService.saveQuestions(content);
        //响应结果
        return ResponseEntity.ok(null);
    }

    /**
     * @description 保存用户通知设置
     * @param settings  用户设置参数
     * @return
     */
    @PostMapping("notifications/setting")
    public ResponseEntity saveNotifications(@RequestBody Settings settings){
        //调用保存通用设置的方法
        myCenterService.saveNotifications(settings);
        //保存完成,响应结果
        return ResponseEntity.ok(null);
    }

    /**
     * @description 查询黑名单列表
     * @param page          当前页
     * @param pageSize      每页条数
     * @return
     */
    @GetMapping("blacklist")
    public ResponseEntity queryBlackList(@RequestParam(value = "page", defaultValue = "1") Integer page,
                                         @RequestParam(value = "pagesize", defaultValue = "10") Integer pageSize){
        //获取响应集合
        PageResult pageResult = myCenterService.queryBlackList(page , pageSize);
        //返回黑名单列表
        return ResponseEntity.ok(pageResult);
    }

    /**
     * @description 移除黑名单
     * @param userId  黑名单用户id
     * @return
     */
    @DeleteMapping("blacklist/{uid}")
    public ResponseEntity removeBlackList(@PathVariable("uid") Long userId){
        //调用移除黑名单方法;
        myCenterService.removeBlackList(userId);
        //返回结果
        return ResponseEntity.ok(null);
    }

    /**
     * @description 客服咨询接口
     * @param content  用户发送的内容
     * @return
     */
    @GetMapping("consult")
    @NoAuthorization
    public ResponseEntity consultOnline(String content){
        //获取客服回复
        String result = myCenterService.consultOnline(content);
        //返回响应结果;
        return ResponseEntity.ok(result);
    }

    /**
     * @description 添加黑名单
     * @param userId 用户id
     * @return
     */
    @GetMapping("addBlackList")
    public ResponseEntity addBlackList(Long userId){
        //执行添加黑名单方法
        myCenterService.addBlackList(userId);
        //返回响应结果
        return ResponseEntity.ok(null);
    }
}
